package com.shujia.common_.nine;

import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo2 {
    @Test
    public void test8() {
        String str = "hello,java!";
        System.out.println(str.replaceFirst("\\w*", "*"));
        System.out.println(str.replaceFirst("\\w*?", "*"));
    }

    @Test
    public void test7() {
        Pattern p = Pattern.compile("\\w*");// 0次或多次, 都会按照多次匹配
//        Pattern p = Pattern.compile("\\w+");// 1次或多次, 都会按照多次匹配
//        Pattern p = Pattern.compile("\\w?");// 贪婪模式, 0次或1次, 都会按照1次匹配
        Matcher m = p.matcher("aa bbb ccccccccccccc");
        while (m.find()) {
            // group()：返回上一次与Pattern匹配的子串, 一定要先调用find()才能调用group()
            System.out.println(m.group());

            // start()：返回上一次与Pattern 匹配的子串在目标字符串中的开始位置
            System.out.println("start:" + m.start());
            // end()：返回上一次与Pattern 匹配的子串在目标字符串中的结束位置加1
            System.out.println("end:" + m.end());
        }
    }

    @Test
    public void test6() {
        String str = "the cat scattered his food catch mcat";

        System.out.println("----不设置边界-----");
        Pattern p = Pattern.compile("cat");
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group() + "   位置：[" + m.start() + "," + m.end() + "]");
        }

        // \b匹配的是非单词
        System.out.println("----两边都设置边界-----");
        p = Pattern.compile("\\bcat\\b");
        m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group() + "   位置：[" + m.start() + "," + m.end() + "]");
        }

        System.out.println("----左边设置边界-----");
        p = Pattern.compile("\\bcat");
        m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group() + "   位置：[" + m.start() + "," + m.end() + "]");
        }

        System.out.println("----右边设置边界-----");
        p = Pattern.compile("cat\\b");
        m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group() + "   位置：[" + m.start() + "," + m.end() + "]");
        }
    }


    @Test
    public void test1() {
        Pattern p = Pattern.compile("^a");
        Matcher m = p.matcher("abc");

        boolean flag = m.matches();
        System.out.println(flag);

        flag = m.lookingAt();
        System.out.println(flag);

//        p = Pattern.compile("\\w\\w");
//        p = Pattern.compile("\\w{2,4}");
        p = Pattern.compile("\\w*");
//        m = p.matcher("aa bb cb");
        m = p.matcher("aa bbb ccccccccccccc");

//        find()：返回目标字符串中是否包含与 Pattern 匹配的子串
        while (m.find()) {
            // group()：返回上一次与Pattern匹配的子串, 一定要先调用find()才能调用group()
            System.out.println(m.group());

            // start()：返回上一次与Pattern 匹配的子串在目标字符串中的开始位置
            System.out.println("start:" + m.start());
            // end()：返回上一次与Pattern 匹配的子串在目标字符串中的结束位置加1
            System.out.println("end:" + m.end());
        }


//        lookingAt()：返回目标字符串前面部分与Pattern是否匹配
//        matches()：返回整个目标字符串与 Pattern是否匹配

    }

}
